﻿using System;
using System.Text;
using System.Text.RegularExpressions;
namespace webnew.Common
{
    /// <summary>
    /// DataValid 利用正则表达式验证
    /// </summary>
    public class DataValid
    {
        public DataValid()
        {
            //
            // TODO: 在此处添加构造函数逻辑
            //
        }

        #region 系统常用的数据验证方法

        #region 验证字符串是否正整数和0
        /// <summary>
        /// 验证字符串是否正整数和0
        /// </summary>
        /// <param name="input">要验证的字符串</param>
        /// <returns></returns>
        public static bool CheckInt32(string input)
        {
            //string regexString = @"^-?\\d+$"; 
            string regexString = "^\\d+$";
            return Regex.IsMatch(input, regexString);
        }
        #endregion


        #region 验证字符串是否浮点数字
        /// <summary>
        /// 验证字符串是否浮点数字
        /// </summary>
        /// <param name="v">要验证的字符串</param>
        /// <returns></returns>
        public static bool CheckDouble(string input)
        {
            string regexString = "^(-?\\d+)(\\.\\d+)?$";

            return Regex.IsMatch(input, regexString);
        }
        #endregion

        #region 验证字符串Email地址
        /// <summary>检查是否是正确Email地址
        /// 
        /// </summary>
        /// <param name="parmString"></param>
        /// <returns></returns>
        public static bool CheckEmail(string parmString)
        {
            bool result;
            string StringReg = "\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$";
            result = Regex.IsMatch(parmString, StringReg);
            return result;
        }
        #endregion

        #region 验证字符串是否日期[2004-2-29|||2004-02-29 10:29:39 pm|||2004/12/31]
        /// <summary>
        /// 验证字符串是否日期[2004-2-29|||2004-02-29 10:29:39 pm|||2004/12/31]
        /// </summary>
        /// <param name="v">要验证的字符串</param>
        /// <returns></returns>
        public static bool CheckDate(string input)
        {
            string regexString = @"^((\d{2}(([02468][048])|([13579][26]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|([1-2][0-9])))))|(\d{2}(([02468][1235679])|([13579][01345789]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(\s(((0?[1-9])|(1[0-2]))\:([0-5][0-9])((\s)|(\:([0-5][0-9])\s))([AM|PM|am|pm]{2,2})))?$";

            return Regex.IsMatch(input, regexString);
            #region Description
            /*
			Expression:  ^((\d{2}(([02468][048])|([13579][26]))[\-\/\s]?((((0?[13578]
							)|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[4
							69])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\
							s]?((0?[1-9])|([1-2][0-9])))))|(\d{2}(([02468][1235679])|([1
							3579][01345789]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((
							0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((
							0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|(1[0-9]
							)|(2[0-8]))))))(\s(((0?[1-9])|(1[0-2]))\:([0-5][0-9])((\s)|(
							\:([0-5][0-9])\s))([AM|PM|am|pm]{2,2})))?$
 
			Author:  Sung Lee 
			Sample Matches:  
			2004-2-29|||2004-02-29 10:29:39 pm|||2004/12/31 
			Sample Non-Matches:  
			2003-2-29|||2003-13-02|||2003-2-2 10:72:30 am 
			Description:  Matches ANSI SQL date format YYYY-mm-dd hh:mi:ss am/pm. You can use / - or space for date delimiters, so 2004-12-31 works just as well as 2004/12/31. Checks leap year from 1901 to 2099. 
			 */
            #endregion
        }
        #endregion

        #endregion

        /// <summary>检查是否为n位数字
        /// 
        /// </summary>
        /// <param name="n">数字位数</param>
        /// <param name="parm">需要检查的字符串</param>
        /// <returns>检查结果</returns>
        public static bool CheckNumber(int n, string parmNumber)
        {
            bool result;
            string NumberReg = "^\\d{" + n + "}$";
            result = Regex.IsMatch(parmNumber, NumberReg);
            return result;
        }

        /// <summary>至少n位数字
        /// 
        /// </summary>
        /// <param name="n">数字位数</param>
        /// <param name="parmNumber"></param>
        /// <returns></returns>
        public static bool CheckNumberLeast(int n, string parmNumber)
        {
            bool result;
            string NumberReg = "^\\d{" + n + ",}$";

            result = Regex.IsMatch(parmNumber, NumberReg);
            return result;
        }

        /// <summary>检查是否为m-n位数字
        /// 
        /// </summary>
        /// <param name="m">字符串数字最少位数</param>
        /// <param name="n">字符串数字最多位数</param>
        /// <param name="parmNumber">需要检查的字符串</param>
        /// <returns></returns>
        public static bool CheckNumber(int m, int n, string parmNumber)
        {
            bool result;
            if (m > n)
            {
                int temp;
                temp = m;
                m = n;
                n = temp;
            }
            string NumberReg = "^\\d{" + m + "," + n + "}$";
            result = Regex.IsMatch(parmNumber, NumberReg);
            return result;
        }

        /// <summary>检测金额是否正确;规则:数字+"."+数字(最多两位)
        /// 
        /// </summary>
        /// <param name="n"></param>
        /// <param name="parmString"></param>
        /// <returns></returns>
        public static bool CheckSum(string parmString)
        {
            bool result;
            string sumReg = "^[0-9]*\\.?[0-9]{0,2}$";
            ;
            result = Regex.IsMatch(parmString, sumReg);
            return result;
        }

        /// <summary>是否只有字母组成的字符串
        /// 
        /// </summary>
        /// <param name="parmString"></param>
        /// <returns></returns>
        public static bool CheckLetter(string parmString)
        {
            bool result;
            string letterReg = @"^[A-Za-z]+$";
            result = Regex.IsMatch(parmString, letterReg);
            return result;
        }

        /// <summary>是否又n位字母组成的字符串
        /// 
        /// </summary>
        /// <param name="n"></param>
        /// <param name="parmString"></param>
        /// <returns></returns>
        public static bool CheckLetter(int n, string parmString)
        {
            bool result;
            string letterReg = @"^[A-Za-z]{" + n + "}$";
            result = Regex.IsMatch(parmString, letterReg);
            return result;
        }

        /// <summary>验证m-n位字母组成
        /// 
        /// </summary>
        /// <param name="m"></param>
        /// <param name="n"></param>
        /// <param name="parmString"></param>
        /// <returns></returns>
        public static bool CheckLetter(int m, int n, string parmString)
        {
            bool result;
            if (m > n)
            {
                int temp;
                temp = m;
                m = n;
                n = temp;
            }
            string letterReg = @"^[A-Za-z]{" + m + "," + n + "}$";
            result = Regex.IsMatch(parmString, letterReg);
            return result;
        }

        /// <summary>检查是否为n位字符,字幕、汉字、数字 都算作一个字符
        /// 
        /// </summary>
        /// <param name="n">字符位数</param>
        /// <param name="parmString">需要检查的字符串</param>
        /// <returns></returns>
        public static bool CheckString(int n, string parmString)
        {
            bool result;
            string StringReg = "^.{" + n + "}$";
            result = Regex.IsMatch(parmString, StringReg);
            return result;
        }

        /// <summary>至少n位字符
        /// 
        /// </summary>
        /// <param name="n">最少字符数</param>
        /// <param name="parmString"></param>
        /// <returns></returns>
        public static bool CheckStringLeast(int n, string parmString)
        {
            bool result;
            string StringReg = "^.{" + n + ",}$";
            result = Regex.IsMatch(parmString, StringReg);
            return result;
        }

        /// <summary>检查是否为m-n为字符
        /// 
        /// </summary>
        /// <param name="m">最少字符数</param>
        /// <param name="n">最多字符数</param>
        /// <param name="parmString">需要检查的字符串</param>
        /// <returns></returns>
        public static bool CheckString(int m, int n, string parmString)
        {
            bool result;
            if (m > n)
            {
                int temp;
                temp = m;
                m = n;
                n = temp;
            }
            string StringReg = "^.{" + m + "," + n + "}$";
            result = Regex.IsMatch(parmString, StringReg);
            return result;
        }

        #region 身份证号码验证
        /// <summary>检查身份证号码是否正确,15位或18位;18位末位可以为x或X
        /// 
        /// </summary>
        /// <param name="parmIDNumber">需要检查的字符串</param>
        /// <returns></returns>
        public static bool CheckIDNumber(string parmIDNumber)
        {
            bool result;
            string IDNumberReg = "^\\d{15}$|^\\d{17}(?:\\d|x|X)$";
            result = Regex.IsMatch(parmIDNumber, IDNumberReg);
            return result;
        }

        /// <summary>验证身份证号,可验证15位或18位 15位补充为18位后验证校验位,18位验证地区、生日、校验位
        /// 
        /// </summary>
        /// <param name="parmIDNumber"></param>
        /// <returns></returns>
        public static bool CheckIDNumberFull(string parmIDNumber)
        {
            bool result = false;
            string IDNumberReg = "^\\d{15}$|^\\d{17}(?:\\d|x|X)$";
            result = Regex.IsMatch(parmIDNumber, IDNumberReg);
            if (!(result))
            {
                return result;
            }
            if (parmIDNumber.Length == 15)
            {
                parmIDNumber = per15To18(parmIDNumber);
            }
            result = CheckIdNumber18(parmIDNumber);
            return result;
        }
        /// <summary>将15位身份证号码转换为18位
        /// 
        /// </summary>
        /// <param name="perIDSrc"></param>
        /// <returns></returns>
        private static string per15To18(string perIDSrc)
        {
            int iS = 0;
            //加权因子常数 
            int[] iW = new int[] { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
            //校验码常数 
            string LastCode = "10X98765432";
            //新身份证号 
            string perIDNew;

            System.Text.RegularExpressions.Regex rg = new System.Text.RegularExpressions.Regex(@"^\d{15}$");
            System.Text.RegularExpressions.Match mc = rg.Match(perIDSrc);
            if (!mc.Success)
            {
                return "Error";
            }
            perIDNew = perIDSrc.Substring(0, 6);
            //填在第6位及第7位上填上‘1’，‘9’两个数字 
            perIDNew += "19";

            perIDNew += perIDSrc.Substring(6, 9);

            //进行加权求和 
            for (int i = 0; i < 17; i++)
            {
                iS += int.Parse(perIDNew.Substring(i, 1)) * iW[i];
            }

            //取模运算，得到模值 
            int iY = iS % 11;
            //从LastCode中取得以模为索引号的值，加到身份证的最后一位，即为新身份证号。 
            perIDNew += LastCode.Substring(iY, 1);
            return perIDNew;
        }

        /// <summary>检查18为身份证号码是否合法,合法返回"OK";非法则返回非法信息
        /// 
        /// </summary>
        /// <param name="cid"></param>
        /// <returns></returns>
        public static string CheckIdNumberInfo18(string cid)
        {
            string[] aCity = new string[] { null, null, null, null, null, null, null, null, null, null, null, "北京", "天津", "河北", "山西", "内蒙古", null, null, null, null, null, "辽宁", "吉林", "黑龙江", null, null, null, null, null, null, null, "上海", "江苏", "浙江", "安微", "福建", "江西", "山东", null, null, null, "河南", "湖北", "湖南", "广东", "广西", "海南", null, null, null, "重庆", "四川", "贵州", "云南", "西藏", null, null, null, null, null, null, "陕西", "甘肃", "青海", "宁夏", "新疆", null, null, null, null, null, "台湾", null, null, null, null, null, null, null, null, null, "香港", "澳门", null, null, null, null, null, null, null, null, "国外" };
            double iSum = 0;
            System.Text.RegularExpressions.Regex rg = new System.Text.RegularExpressions.Regex(@"^\d{17}(\d|X|x)$");
            System.Text.RegularExpressions.Match mc = rg.Match(cid);
            if (!mc.Success)
            {
                return "位数不正确！";
            }
            cid = cid.ToLower();
            cid = cid.Replace("x", "a");
            if (aCity[int.Parse(cid.Substring(0, 2))] == null)
            {
                return "非法地区";
            }
            try
            {
                DateTime.Parse(cid.Substring(6, 4) + "-" + cid.Substring(10, 2) + "-" + cid.Substring(12, 2));
            }
            catch
            {
                return "非法生日";
            }
            for (int i = 17; i >= 0; i--)
            {
                iSum += (System.Math.Pow(2, i) % 11) * int.Parse(cid[17 - i].ToString(), System.Globalization.NumberStyles.HexNumber);
            }
            if (iSum % 11 != 1)
            {
                return ("非法证号");
            }
            //return (aCity[int.Parse(cid.Substring(0, 2))] + "," + cid.Substring(6, 4) + "-" + cid.Substring(10, 2) + "-" + cid.Substring(12, 2) + "," + (int.Parse(cid.Substring(16, 1)) % 2 == 1 ? "男" : "女"));

            return "OK";
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="cid"></param>
        /// <returns></returns>
        public static bool CheckIdNumber18(string cid)
        {
            string[] aCity = new string[] { null, null, null, null, null, null, null, null, null, null, null, "北京", "天津", "河北", "山西", "内蒙古", null, null, null, null, null, "辽宁", "吉林", "黑龙江", null, null, null, null, null, null, null, "上海", "江苏", "浙江", "安微", "福建", "江西", "山东", null, null, null, "河南", "湖北", "湖南", "广东", "广西", "海南", null, null, null, "重庆", "四川", "贵州", "云南", "西藏", null, null, null, null, null, null, "陕西", "甘肃", "青海", "宁夏", "新疆", null, null, null, null, null, "台湾", null, null, null, null, null, null, null, null, null, "香港", "澳门", null, null, null, null, null, null, null, null, "国外" };
            double iSum = 0;
            System.Text.RegularExpressions.Regex rg = new System.Text.RegularExpressions.Regex(@"^\d{17}(\d|X|x)$");
            System.Text.RegularExpressions.Match mc = rg.Match(cid);
            if (!mc.Success)
            {
                return false;
            }
            cid = cid.ToLower();
            cid = cid.Replace("x", "a");
            if (aCity[int.Parse(cid.Substring(0, 2))] == null)
            {
                return false;
            }
            try
            {
                DateTime.Parse(cid.Substring(6, 4) + "-" + cid.Substring(10, 2) + "-" + cid.Substring(12, 2));
            }
            catch
            {
                return false;
            }
            for (int i = 17; i >= 0; i--)
            {
                iSum += (System.Math.Pow(2, i) % 11) * int.Parse(cid[17 - i].ToString(), System.Globalization.NumberStyles.HexNumber);
            }
            if (iSum % 11 != 1)
            {
                return false;
            }
            //return (aCity[int.Parse(cid.Substring(0, 2))] + "," + cid.Substring(6, 4) + "-" + cid.Substring(10, 2) + "-" + cid.Substring(12, 2) + "," + (int.Parse(cid.Substring(16, 1)) % 2 == 1 ? "男" : "女"));

            return true;
        }
        #endregion

        /// <summary>是否为指定位数,指定字符
        /// 
        /// </summary>
        /// <param name="n">字符位数</param>
        /// <param name="parmDefinitudeString">指定字符组成的字符串数组</param>
        /// <param name="parmString">需要检查的字符串</param>
        /// <returns></returns>
        public static bool CheckDefinitudeString(int n, string[] parmDefinitudeString, string parmString)
        {
            bool result;
            StringBuilder ss = new StringBuilder("");
            for (int i = 0; i < parmDefinitudeString.Length; i++)
            {
                ss = ss.Append(parmDefinitudeString[i]);
                if (i != (parmDefinitudeString.Length - 1))
                {
                    ss = ss.Append("|");
                }
            }
            string StringReg = "^[" + ss.ToString() + "]{" + n + "}$";
            result = Regex.IsMatch(parmString, StringReg);
            return result;
        }

        /// <summary>指定m-n位的制定字符
        /// 
        /// </summary>
        /// <param name="m">最少匹配次数</param>
        /// <param name="n">最多匹配次数</param>
        /// <param name="parmDefinitudeString">制定字符组成的字符串数组</param>
        /// <param name="parmString"></param>
        /// <returns></returns>
        public static bool CheckDefinitudeString(int m, int n, string[] parmDefinitudeString, string parmString)
        {
            bool result;
            if (m > n)
            {
                int temp;
                temp = m;
                m = n;
                n = temp;
            }
            StringBuilder ss = new StringBuilder("");
            for (int i = 0; i < parmDefinitudeString.Length; i++)
            {
                ss = ss.Append(parmDefinitudeString[i]);
                if (i != (parmDefinitudeString.Length - 1))
                {
                    ss = ss.Append("|");
                }
            }
            string StringReg = "^[" + ss.ToString() + "]{" + m + "," + n + "}$";
            result = Regex.IsMatch(parmString, StringReg);
            return result;
        }

        /// <summary>检查是否为URl
        /// 
        /// </summary>
        /// <param name="parmString">需要检查字符串</param>
        /// <returns></returns>
        public static bool CheckURL(string parmString)
        {
            bool result;
            string StringReg = "(http(s)?://){0,1}([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?$";
            result = Regex.IsMatch(parmString, StringReg);
            return result;
        }



        /// <summary>检查是否为正确邮编号码
        /// 
        /// </summary>
        /// <param name="parmString"></param>
        /// <returns></returns>
        public static bool CheckPostNum(string parmString)
        {
            bool result;
            string StringReg = "\\d{6}";
            result = Regex.IsMatch(parmString, StringReg);
            return result;
        }

        /// <summary>是否为正确手机号码;规则:手机号码 13|15(0,3,6,8,9)+8位数字;
        /// 
        /// </summary>
        /// <param name="parmString"></param>
        /// <returns></returns>
        public static bool CheckCellPhone(string parmString)
        {
            bool result;
            string StringReg = @"^(13[0-9]|15[0|3|6|8|9])\d{8}$";
            result = Regex.IsMatch(parmString, StringReg);
            return result;
        }

        /// <summary>验证是否为正确固定电话号码.规则[3-4位区号+"-"+]7-8位数字[+"-"+0-4位分机号码]
        /// 
        /// </summary>
        /// <param name="parmString"></param>
        /// <returns></returns>
        public static bool CheckImmobilityTel(string parmString)
        {
            bool result;
            string StringReg = @"(^((\d{7,8})|(\d{3,4})-(\d{7,8})|(\d{3,4})-(\d{7,8})-(\d{0,4})|(\d{7,8})-(\d{0,4}))$)";
            result = Regex.IsMatch(parmString, StringReg);
            return result;
        }

        /// <summary>验证是否为正确电话号码,包括手机号码,固定电话;规则:手机号码 13|15(0,3,6,8,9)+8位数字;规定电话:规则[3-4位区号+"-"+]7-8位数字[+"-"+0-4位分机号码]
        /// 
        /// </summary>
        /// <param name="parmString"></param>
        /// <returns></returns>
        public static bool CheckTelNumber(string parmString)
        {
            bool result;
            string StringReg = @"^(((13[0-9]|15[0|3|6|8|9])\d{8})|((\d{7,8})|(\d{3,4})-(\d{7,8})|(\d{3,4})-(\d{7,8})-(\d{0,4})|(\d{7,8})-(\d{0,4})))$";
            result = Regex.IsMatch(parmString, StringReg);
            return result;
        }

        #region 验证是否为时间
        /// <summary>
        /// 验证年月 规则:"yyyy-mm"
        /// </summary>
        /// <param name="parmString"></param>
        /// <returns></returns>
        public static bool CheckYearMonth(string parmString)
        {
            bool result;
            string StringReg = "^\\d{4}-?(?:0[1-9]|1[0-2]|)$";//"^\\d{4}-?(?:0[1-9]|1[0-2]|[1-9])$"可以匹配"yyyy-mm"或"yyyy-m";
            result = Regex.IsMatch(parmString, StringReg);
            return result;
        }

        /// <summary>
        /// 验证日期可验证平年\闰年 规则:"YYYY-[M]M-[D]D" "YYYY/MM/DD" "YYYY_[M]M_[D]D" "YYYY.[M]M.[D]D" 即月份\日期前可有前导0,可无前导0
        /// </summary>
        /// <param name="parmString"></param>
        /// <returns></returns>
        //public static bool CheckDate(string parmString)
        //{
        //    bool result;
        //    string StringReg = @"((^((1[8-9]\d{2})|([2-9]\d{3}))([-\/\._])(10|12|0?[13578])([-\/\._])(3[01]|[12][0-9]|0?[1-9])$)|(^((1[8-9]\d{2})|([2-9]\d{3}))([-\/\._])(11|0?[469])([-\/\._])(30|[12][0-9]|0?[1-9])$)|(^((1[8-9]\d{2})|([2-9]\d{3}))([-\/\._])(0?2)([-\/\._])(2[0-8]|1[0-9]|0?[1-9])$)|(^([2468][048]00)([-\/\._])(0?2)([-\/\._])(29)$)|(^([3579][26]00)([-\/\._])(0?2)([-\/\._])(29)$)|(^([1][89][0][48])([-\/\._])(0?2)([-\/\._])(29)$)|(^([2-9][0-9][0][48])([-\/\._])(0?2)([-\/\._])(29)$)|(^([1][89][2468][048])([-\/\._])(0?2)([-\/\._])(29)$)|(^([2-9][0-9][2468][048])([-\/\._])(0?2)([-\/\._])(29)$)|(^([1][89][13579][26])([-\/\._])(0?2)([-\/\._])(29)$)|(^([2-9][0-9][13579][26])([-\/\._])(0?2)([-\/\._])(29)$))";
        //    result = Regex.IsMatch(parmString, StringReg);
        //    return result;
        //}

        /// <summary>
        /// 验证日期可验证平年\闰年 规则:"YYYY-MM-DD" 可有无误前导0
        /// </summary>
        /// <param name="parmString"></param>
        /// <returns></returns>
        public static bool CheckDateH(string parmString)
        {
            bool result;
            string StringReg = @"^((\d{2}(([02468][048])|([13579][26]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|([1-2][0-9])))))|(\d{2}(([02468][1235679])|([13579][01345789]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))"; //日期部分
            result = Regex.IsMatch(parmString, StringReg);
            return result;
        }

        /// <summary>
        /// 验证时间 规则:"HH-MM-SS" 可以有前导0也可以没有前导0
        /// </summary>
        /// <param name="parmString"></param>
        /// <returns></returns>
        public static bool CheckTime(string parmString)
        {
            bool result;
            string StringReg = @"^(20|21|22|23|[0-1]?\d):[0-5]?\d:[0-5]?\d$";
            result = Regex.IsMatch(parmString, StringReg);
            return result;
        }

        /// <summary>
        /// 验证日期时间 规则:"YYYY-MM-DD HH-MM-SS" 可有可无前导0 日期与时间中可以有若干空格
        /// </summary>
        /// <param name="parmString"></param>
        /// <returns></returns>
        public static bool CheckDateTime(string parmString)
        {
            bool result;
            //string StringReg=@"^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-)) (20|21|22|23|[0-1]?\d):[0-5]?\d:[0-5]?\d$";
            string StringReg = @"^((\d{2}(([02468][048])|([13579][26]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|([1-2][0-9])))))|(\d{2}(([02468][1235679])|([13579][01345789]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))"; //日期部分
            StringReg += @"(\s*(((0?[0-9])|([1-2][0-3]))\:([0-5]?[0-9])((\s)|(\:([0-5]?[0-9])))))?$"; //时间部分
            result = Regex.IsMatch(parmString, StringReg);
            return result;
        }


        #endregion
        /// <summary>
        /// 判断是否是汉字,1个或多个
        /// </summary>
        /// <param name="parmString"></param>
        /// <returns></returns>
        public static bool CheckCharacters(string parmString)
        {
            bool result;
            string StringReg = @"^[\u0391-\uFFE5]+$";
            result = Regex.IsMatch(parmString, StringReg);
            return result;
        }

        /// <summary>验证n个汉字
        /// 
        /// </summary>
        /// <param name="n">汉字个数</param>
        /// <param name="parmString"></param>
        /// <returns></returns>
        public static bool CheckCharacters(int n, string parmString)
        {
            bool result;
            string StringReg = @"^[\u0391-\uFFE5]{" + n + "}$";
            result = Regex.IsMatch(parmString, StringReg);
            return result;
        }

        /// <summary>验证m-n个汉字
        /// 
        /// </summary>
        /// <param name="m">最少汉字个数</param>
        /// <param name="n">最多汉字个数</param>
        /// <param name="parmString"></param>
        /// <returns></returns>
        public static bool CheckCharacters(int m, int n, string parmString)
        {
            bool result;
            if (m > n)
            {
                int temp;
                temp = m;
                m = n;
                n = temp;
            }
            string StringReg = @"^[\u0391-\uFFE5]{" + m + "," + n + "}$";
            result = Regex.IsMatch(parmString, StringReg);
            return result;

        }

        /// <summary>函数名称checkparm；检查sql是否有注入的可能性
        /// 
        /// </summary>
        /// <param name="parm"></param>
        /// <returns></returns>
        public static bool checkparm(string parm)
        {
            //if ((username.ToLower().IndexOf("or") > -1) || (userpwd.ToLower().IndexOf("or") > -1) || (username.ToLower().IndexOf("insert") > -1) || (userpwd.ToLower().IndexOf("insert") > -1) || (username.ToLower().IndexOf("delete") > -1) || (userpwd.ToLower().IndexOf("delete") > -1))
            //{
            // Response.Redirect("index.htm?msg=err01");
            if (parm == null)
                return true;
            if ((parm.ToLower().IndexOf("\"") > -1))
            {
                return false;
            }
            if ((parm.ToLower().IndexOf("or") > -1))
            {
                return false;
            }
            if ((parm.ToLower().IndexOf("=") > -1))
            {
                return false;
            }
            if ((parm.ToLower().IndexOf("'") > -1))
            {
                return false;
            }
            if ((parm.ToLower().IndexOf(";") > -1))
            {
                return false;
            }
            if ((parm.ToLower().IndexOf(",") > -1))
            {
                return false;
            }
            if ((parm.ToLower().IndexOf("%") > -1))
            {
                return false;
            }
            if ((parm.ToLower().IndexOf("exec") > -1))
            {
                return false;
            }
            if ((parm.ToLower().IndexOf("select") > -1))
            {
                return false;
            }
            if ((parm.ToLower().IndexOf("count") > -1))
            {
                return false;
            }
            if ((parm.ToLower().IndexOf("asc") > -1))
            {
                return false;
            }
            if ((parm.ToLower().IndexOf("char") > -1))
            {
                return false;
            }
            if ((parm.ToLower().IndexOf("mid") > -1))
            {
                return false;
            }
            if ((parm.ToLower().IndexOf("insert") > -1))
            {
                return false;
            }
            if ((parm.ToLower().IndexOf("delete") > -1))
            {
                return false;
            }
            if ((parm.ToLower().IndexOf("drop") > -1))
            {
                return false;
            }
            if ((parm.ToLower().IndexOf("update") > -1))
            {
                return false;
            }
            if ((parm.ToLower().IndexOf("truncate") > -1))
            {
                return false;
            }
            if ((parm.ToLower().IndexOf("from") > -1))
            {
                return false;
            }
            return true;
        }
    }

}